#!/bin/bash

# 定义日志目录路径
SCRIPT_LOG_DIR="$SCRIPT_PATH/log/script_log"
# 定义SQL执行日志目录路径
DB_EXEC_LOG_DIR="$SCRIPT_PATH/log/db_exec_log"

# 设置日志文件路径
SCRIPT_LOG_PATH="$SCRIPT_LOG_DIR/$(date +%Y%m%d).log"

# 确保SCRIPT_PATH已定义
if [ -z "$SCRIPT_PATH" ]; then
  echo "错误: SCRIPT_PATH变量未定义" >&2
  exit 1
fi

# 初始化主机名变量
machine_name="$(hostname)"

# 初始化日志目录函数
function init_log_dirs {
  # 如果SCRIPT_PATH未定义，尝试自动确定
  if [ -z "$SCRIPT_PATH" ]; then
    source_dir="$(dirname "$0")"
    SCRIPT_PATH="$(cd "$source_dir/.." && pwd)"
    
    # 重新设置日志路径变量
    SCRIPT_LOG_DIR="$SCRIPT_PATH/log/script_log"
    SCRIPT_LOG_PATH="$SCRIPT_LOG_DIR/$(date +%Y%m%d).log"
    DB_EXEC_LOG_DIR="$SCRIPT_PATH/log/db_exec_log"
  fi
  
  # 确保脚本日志目录存在
  if [ ! -d "$SCRIPT_LOG_DIR" ]; then
    if mkdir -p "$SCRIPT_LOG_DIR"; then
      echo "成功创建脚本日志目录: $SCRIPT_LOG_DIR" >&2
    else
      echo "无法创建脚本日志目录: $SCRIPT_LOG_DIR" >&2
      return 1
    fi
  fi
  
  # 确保SQL执行日志目录存在
  if [ ! -d "$DB_EXEC_LOG_DIR" ]; then
    if mkdir -p "$DB_EXEC_LOG_DIR"; then
      echo "成功创建SQL执行日志目录: $DB_EXEC_LOG_DIR" >&2
    else
      echo "无法创建SQL执行日志目录: $DB_EXEC_LOG_DIR" >&2
      return 1
    fi
  fi
  
  return 0
}

# 初始化日志目录
init_log_dirs

# 日志函数 - 支持可选的错误级别
function f_log {
  local log_level="INFO"
  local message="$1"
  
  # 检查是否指定了日志级别
  if [ $# -gt 1 ]; then
    log_level="$2"
  fi
  
  echo "$(date +\[%Y-%m-%d\ %H:%M:%S]): [$log_level] $message" >>"$SCRIPT_LOG_PATH"
  
  # 如果是错误级别，同时输出到标准错误
  if [ "$log_level" = "ERROR" ]; then
    echo "$(date +\[%Y-%m-%d\ %H:%M:%S]): [$log_level] $message" >&2
  fi
}

# 初始化目录函数
function init_path() {
  local FOLDER_TO_CHECK="$1"
  f_log "开始初始化文件夹 $FOLDER_TO_CHECK"
  if [ -d "$FOLDER_TO_CHECK" ]; then
    f_log "路径 $FOLDER_TO_CHECK 已经存在。"
  else
    if mkdir -p "$FOLDER_TO_CHECK"; then
      f_log "成功创建路径 \"$FOLDER_TO_CHECK\""
    else
      f_log "无法创建路径 \"$FOLDER_TO_CHECK\"。请检查权限。" "ERROR"
      return 1
    fi
  fi
  return 0
}

# 检查文件是否存在函数
function check_file_exists() {
  local file_path="$1"
  if [ ! -f "$file_path" ]; then
    f_log "文件不存在: $file_path" "ERROR"
    return 1
  fi
  return 0
}

# 检查目录是否存在，如果不存在则创建函数
function ensure_dir_exists() {
  local dir_path="$(dirname "$1")"
  init_path "$dir_path"
  return $?
}

# 密码解密函数
function decrypt_password() {
  local encrypted_password="$1"
  echo "$encrypted_password" | openssl des-ede3-cbc -k bboss -base64 -d -pbkdf2
}
